]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
dateMenu: Don't generate JS garbage every clock tick
authorJasper St. Pierre <jstpierre@mecheye.net>
Wed, 1 Oct 2014 21:28:14 +0000 (15:28 -0600)
committerJasper St. Pierre <jstpierre@mecheye.net>
Wed, 1 Oct 2014 21:42:49 +0000 (15:42 -0600)
Instead of waking up the JS every second to set the clock and update a
date label the user will rarely see, simply use property binding to
bypass JS string handling, and update the date in the menu when the menu
is opened.

js/ui/dateMenu.js

index 1a86a6ac2f0f22b4361af2ec6df4e04db43201f6..db8f2a5563b6c023fac812814ba9f448c65dda54 100644 (file)
@@ -3,6 +3,7 @@
 const GLib = imports.gi.GLib;
 const Gio = imports.gi.Gio;
 const GnomeDesktop = imports.gi.GnomeDesktop;
+const GObject = imports.gi.GObject;
 const Lang = imports.lang;
 const Mainloop = imports.mainloop;
 const Cairo = imports.cairo;
@@ -124,14 +125,19 @@ const DateMenuButton = new Lang.Class({
             if (isOpen) {
                 let now = new Date();
                 this._calendar.setDate(now);
+
+                /* Translators: This is the date format to use when the calendar popup is
+                 * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
+                 */
+                let dateFormat = _("%A %B %e, %Y");
+                this._date.set_label(now.toLocaleFormat(dateFormat));
             }
         }));
 
         // Done with hbox for calendar and event list
 
         this._clock = new GnomeDesktop.WallClock();
-        this._clock.connect('notify::clock', Lang.bind(this, this._updateClockAndDate));
-        this._updateClockAndDate();
+        this._clock.bind_property('clock', this._clockDisplay, 'text', GObject.BindingFlags.SYNC_CREATE);
 
         Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
         this._sessionUpdated();
@@ -196,16 +202,6 @@ const DateMenuButton = new Lang.Class({
         this._dateAndTimeSeparator.actor.visible = Main.sessionMode.allowSettings;
     },
 
-    _updateClockAndDate: function() {
-        this._clockDisplay.set_text(this._clock.clock);
-        /* Translators: This is the date format to use when the calendar popup is
-         * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
-         */
-        let dateFormat = _("%A %B %e, %Y");
-        let displayDate = new Date();
-        this._date.set_label(displayDate.toLocaleFormat(dateFormat));
-    },
-
     _getCalendarApp: function() {
         if (this._calendarApp !== undefined)
             return this._calendarApp;